#!/bin/sh
stty sane
stty erase ^H

# 更新软件包并安装必要工具
opkg update
opkg install sshpass
opkg install openssh-client-utils

# 检查旧脚本
OLD_SCRIPT="/usr/shutdown_esxi.sh"
if [ -f "$OLD_SCRIPT" ]; then
    echo "检测到已存在的关机脚本：$OLD_SCRIPT"
    echo "当前脚本内容："
    echo "----------------------------------------"
    cat "$OLD_SCRIPT"
    echo "----------------------------------------"
    
    # 提取旧IP和旧密码（兼容BusyBox）
    OLD_IP=$(grep -oE 'root@[0-9.]+' "$OLD_SCRIPT" | sed 's/root@//')
    OLD_PASSWORD=$(grep -oE "sshpass -p '[^']+'" "$OLD_SCRIPT" | sed "s/sshpass -p '//;s/'//")
    
    echo "当前配置：IP=${OLD_IP:-未设置}, 密码=${OLD_PASSWORD:+（已设置）}"
    echo "----------------------------------------"
    echo "请选择操作："
    echo "1) 查看当前脚本内容"
    echo "2) 修改脚本"
    echo "3) 退出"
    read -p "请输入选择 (1-3): " script_choice
    
    case $script_choice in
        1)
            echo "=== 当前脚本内容 ==="
            cat "$OLD_SCRIPT"
            echo "==================="
            exit 1
            ;;
        2)
            echo "=== 当前脚本内容 ==="
            cat "$OLD_SCRIPT"
            ;;
        3)
            exit 0
            ;;
        *)
            echo "无效选择，退出。"
            exit 1
            ;;
    esac
fi

# 获取新IP和密码
read -p "请输入ESXi服务器IP地址（当前: ${OLD_IP:-未设置}）: " ESXI_IP
read -s -p "请输入ESXi root密码（留空则保持旧密码）: " ESXI_PASSWORD
echo ""

# 如果未输入新密码，则使用旧密码
if [ -z "$ESXI_PASSWORD" ] && [ -n "$OLD_PASSWORD" ]; then
    ESXI_PASSWORD="$OLD_PASSWORD"
fi

# 创建/更新脚本
echo "#!/bin/sh
sshpass -p '$ESXI_PASSWORD' ssh -o StrictHostKeyChecking=no root@$ESXI_IP '/sbin/poweroff'
" > "$OLD_SCRIPT"
chmod +x "$OLD_SCRIPT"
echo "脚本已更新：IP=$ESXI_IP"

# 设置关机时间
echo "请输入每日自动关机时间（24小时制）"
while true; do
    read -p "小时 (00-23): " HOURS
    if [ "$HOURS" -ge 0 ] && [ "$HOURS" -le 23 ] 2>/dev/null; then
        break
    else
        echo "错误：请输入00-23之间的数字"
    fi
done

while true; do
    read -p "分钟 (00-59): " MINUTES
    if [ "$MINUTES" -ge 0 ] && [ "$MINUTES" -le 59 ] 2>/dev/null; then
        break
    else
        echo "错误：请输入00-59之间的数字"
    fi
done

# 格式化时间
HOURS=$(printf "%02d" "$HOURS")
MINUTES=$(printf "%02d" "$MINUTES")

# 更新Cron任务
CRON_JOB="$MINUTES $HOURS * * * /bin/sh $OLD_SCRIPT"
if grep -q "$OLD_SCRIPT" /etc/crontabs/root; then
    echo "检测到已存在的定时任务，正在更新..."
    sed -i "\|$OLD_SCRIPT|d" /etc/crontabs/root
fi
echo "$CRON_JOB" >> /etc/crontabs/root
/etc/init.d/cron reload

echo ""
echo "✅ 设置完成！"
echo "ESXi服务器: $ESXI_IP"
echo "关机时间: 每天 $HOURS:$MINUTES"
echo "脚本路径: $OLD_SCRIPT"